【初心者向け・Python】VSCodeで特定のディレクトリのみ保存時に自動でBlackとisortのフォーマットをかける方法

【初心者向け・Python】VSCodeで特定のディレクトリのみ保存時に自動でBlackとisortのフォーマットをかける方法

Clock Icon2024.5.17

データアナリティクス事業本部のueharaです。

今回は、VSCodeで特定のディレクトリのみ自動でBlackとisortのフォーマットをかける方法をご紹介したいと思います。

はじめに

VSCodeの設定には「ユーザー設定」「ワークスペース設定」の2種類があります。

以下の記事が分かりやすいですが、適用される優先度としては ワークスペース設定 > ユーザー設定 となります。

すなわち、例えばフォント設定がユーザー設定で定義されており、ワークスペース設定で定義されてない場合はユーザー設定が適用されます。

逆に、フォント設定がユーザー設定にもワークスペース設定にも定義されている場合は、ワークスペース設定が適用されます。

事前準備

Blackとisortのインストール

Blackとisortを pip でインストールします。

$ pip install black isort

拡張機能のインストール

まず、拡張機能のマーケットプレースから「Black Formatter」をインストールします。

次に、「isort」をインストールします。

以上で準備は完了です。

やってみた

テストファイル作成

まず、VSCodeで適当なフォルダを開き、以下の test.py を作成します。(フォーマットは敢えて汚くしています)

.
└── test.py
import sys
import os
import boto3

def main():
    """Test Function
    """
    print("aaaaa",
          "bbb",
          "ccc")

if __name__ == "__main__":
    main()

ワークスペース設定の作成

次に、ワークスペース設定を作成します。

具体的には、作業ディレクトリに .vscode フォルダを作り、 その中に settings.json を作成します。(※この settings.json がワークスペースの設定)

.
├── .vscode
│   └── settings.json
└── test.py

作成した settings.json は、自動でフォーマットを適用させるために以下の記載を行います。

settings.json

{
    "[python]": {
        // Blackでフォーマット
        "editor.defaultFormatter": "ms-python.black-formatter",
        "editor.formatOnType": true,
        "editor.formatOnPaste": true,
        "editor.formatOnSave": true,       // 保存時に適用
        // isortでフォーマット
        "editor.codeActionsOnSave": {
            "source.organizeImports": true // 保存時に適用
        },
        "isort.args": ["--profile", "black"]
    }
}

Pythonスクリプトのフォーマット

先に作成した test.py を再保存すると、Blackとisortでフォーマットがかかり、以下のようにフォーマットされます。

import os
import sys

import boto3


def main():
    """Test Function"""
    print("aaaaa", "bbb", "ccc")


if __name__ == "__main__":
    main()

以後は作成するPythonスクリプト全てに対してフォーマットがかかるようになります。

なお、上記の設定はあくまでワークスペース設定のため、他の作業スペースには影響を与えません。

最後に

今回は、VSCodeで特定のディレクトリのみ自動でBlackとisortのフォーマットをかける方法をご紹介してみました。

参考になりましたら幸いです。

参考文献

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.